home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 2000
/
MacHack 2000.toast
/
pc
/
The Hacks
/
Softshoe
/
Lisa's Mac Parts
/
Files
/
Volumes
/
VolumeInfo.cp
< prev
next >
Wrap
Text File
|
2000-06-23
|
3KB
|
132 lines
// VolumeInfo.cp
#ifndef VolumeInfo_h
#include "VolumeInfo.h"
#endif
#ifndef NoSuchVolume_h
#include "NoSuchVolume.h"
#endif
#ifndef BadVolumeNameError_h
#include "BadVolumeNameError.h"
#endif
VolumeInfo::VolumeInfo()
{
volumeParam.ioCompletion = 0;
volumeParam.ioNamePtr = name.Raw();
}
VolumeInfo::VolumeInfo( ConstPString targetName )
{
volumeParam.ioCompletion = 0;
volumeParam.ioNamePtr = name.Raw();
Get( targetName );
}
VolumeInfo::VolumeInfo( ::Volume volume )
{
volumeParam.ioCompletion = 0;
volumeParam.ioNamePtr = name.Raw();
Get( volume );
}
VolumeInfo::VolumeInfo( uint16 index )
{
volumeParam.ioCompletion = 0;
volumeParam.ioNamePtr = name.Raw();
Get( index );
}
VolumeInfo::VolumeInfo( const VolumeInfo& source )
: name( source.name ),
HParamBlockRec( source )
{
volumeParam.ioNamePtr = name.Raw();
}
void VolumeInfo::operator==( const VolumeInfo& source )
{
static_cast< HParamBlockRec& >( *this ) = source;
name = source.name;
volumeParam.ioNamePtr = name.Raw();
}
void VolumeInfo::Get()
{
volumeParam.ioVolIndex = 0;
ThrowError( PBHGetVInfoSync( this ) );
}
void VolumeInfo::Get( ConstPString targetName )
{
name = targetName;
volumeParam.ioVolIndex = -1;
volumeParam.ioVRefNum = 0;
ThrowError( PBHGetVInfoSync( this ) );
}
void VolumeInfo::Get( ::Volume volume )
{
volumeParam.ioVolIndex = 0;
volumeParam.ioVRefNum = volume.RefNum();
ThrowError( PBHGetVInfoSync( this ) );
}
void VolumeInfo::Get( uint16 index )
{
volumeParam.ioVolIndex = index;
ThrowError( PBHGetVInfoSync( this ) );
}
bool VolumeInfo::TryToGet( uint16 index )
{
volumeParam.ioVolIndex = index;
OSErr error = PBHGetVInfoSync( this );
if ( error == nsvErr )
return false;
ThrowError( error );
return true;
}
void VolumeInfo::Set()
{
ThrowError( PBSetVInfoSync( this ) );
}
void VolumeInfo::Set( ::Volume volume )
{
volumeParam.ioVRefNum = volume.RefNum();
ThrowError( PBSetVInfoSync( this ) );
}
void VolumeInfo::ThrowError( OSErr error )
{
if ( error == noErr )
return;
switch ( error )
{
case nsvErr: throw NoSuchVolume( error );
case bdNamErr: throw BadVolumeNameError( error );
}
throw VolumeError( error );
}
::Drive VolumeInfo::Drive() const
{
return ::Drive( Online()
? volumeParam.ioVDrvInfo
: Ejected()
? volumeParam.ioVDRefNum
: -volumeParam.ioVDRefNum );
}
::Driver VolumeInfo::Driver() const
{
Assert( Online() );
return ::Driver( volumeParam.ioVDRefNum );
}